#ifndef THIS_DEMO_HPP
#define THIS_DEMO_HPP

namespace this_demo {

void test() {
  // 常量指针不能修改常量
  int const *p1 = new int(1);
  p1 = new int(11);
  // *p1 = 11;// error

  // 指针常量不能修改指针
  int *const p2 = new int(2);
  // p2 = new int(22);// error
  *p2 = 22;

  // const* int p3 = new int(3);

  // 常量指针不能修改常量
  const int *p4 = new int(4);
  p4 = new int(44);
  // *p4 = 44;
}

/// ref: http://c.biancheng.net/cpp/biancheng/view/201.html
/// this到底是什么？？？
/// this 实际上是成员函数的一个形参，在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的，它并不出现在代码中，而是在编译阶段由编译器默默地将它添加到参数列表中。
/// this 作为隐式形参，本质上是成员函数的局部变量，所以只能用在成员函数的内部，并且只有在通过对象调用成员函数时才给 this 赋值。
void test2() {

}

void this_demo() {
  test();
}

} // namespace this_demo

#endif // THIS_DEMO_HPP